इस लेख में, हम एक प्रोग्राम बनाएंगे जो आपको पायथन स्क्रिप्ट वाली वेबसाइट से डेटा को परिमार्जन या हड़पने की अनुमति देता है। डेटा एकत्र करने की इस विधि को वेब स्क्रैपिंग कहा जाता है।
वेब स्क्रैपिंग एक वेब पेज से डेटा को डाउनलोड करने, साफ करने और उपयोग करने के लिए प्रोग्रामेटिक रूप से पायथन या किसी अन्य प्रोग्रामिंग भाषा का उपयोग करने के बारे में है। अधिकांश वेबसाइटें नहीं चाहतीं कि आप उनके डेटा को स्क्रैप करें, और यह पता लगाने के लिए कि स्क्रैपिंग के लिए कानूनी और अनुमत क्या है, वेबसाइटों के पास एक समर्पित पृष्ठ है जो अनुमत अंतिम बिंदुओं का विवरण दिखाता है।
अनुमत अंतिम बिंदुओं के बारे में जानने के लिए किसी भी लिंक के अंत में robots.txt संलग्न करें। उदाहरण के लिए, आइए https://news.ycombinator.com/robots.txt का उपयोग करें।
परिणाम नीचे इस पाठ फ़ाइल के साथ इस तरह दिखना चाहिए:
स्क्रीनशॉट बताता है कि वाईकॉम्बिनेटर वेबसाइट से हमें किन समापन बिंदुओं की अनुमति है और परिमार्जन करने की अनुमति नहीं है। क्रॉल विलंब का अर्थ है प्रोग्राम के साथ वेबसाइट से डेटा स्क्रैप करते समय एक विराम, जिससे उनके सर्वर ओवरलोड नहीं होते हैं और लगातार स्क्रैपिंग के कारण वेबसाइट को धीमा कर देते हैं।
इस अभ्यास में, हम समाचार सामग्री के होम पेज को स्क्रैप करते हैं, जो हम उपयोगकर्ता एजेंट के अनुसार कर सकते हैं।
पायथन वेब स्क्रैपर को डेटा स्क्रैप करने के लिए दो आवश्यक मॉड्यूल की आवश्यकता होती है:
सुंदर सूप HTML फ़ाइलों से डेटा निकालने के लिए एक पायथन लाइब्रेरी है। यह एक पार्सर का उपयोग करके फ़ाइल को संशोधित करता है, डेटा को एक मूल्यवान दस्तावेज़ में बदल देता है, और प्रोग्रामर के मैनुअल और दोहराव के काम के घंटे बचाता है।
अनुरोध HTTP पुस्तकालय वेबसाइट के लिंक का उपयोग करके HTML फ़ाइलों को डाउनलोड करने के लिए है
.get()
समारोह।अब इस परियोजना की बारीकियों के बारे में। एक नई निर्देशिका बनाएं, और वहां, एक फ़ाइल जिसमें वेब स्क्रैपर प्रोग्राम के लिए सभी स्क्रिप्ट शामिल होंगी।
निम्नलिखित कोड को कॉपी और पेस्ट करें:
# app.py import requests response = requests.get( 'https://news.ycombinator.com/news' ) yc_web_page = response.text print(yc_web_page)
उपरोक्त कोड निम्न कार्य करता है:
requests
मापांक .get()
फ़ंक्शन प्रदान की गई वेबसाइट के लिंक से HTML फ़ाइलों को डाउनलोड करें .text
यदि आप इस कोड को कमांड के साथ चलाते हैं python
app.py
और यह आपको कोई आउटपुट नहीं देता है, इसका मतलब है कि दो आयातित मॉड्यूल को स्थापित करने की आवश्यकता है।मॉड्यूल स्थापित करने के लिए निम्न आदेश चलाएँ।
pip3 install requests pip install beautifulsoup4
स्रोत कोड का परिणाम इस तरह दिखना चाहिए:
अगला, आइए अपडेट करें
app.py
सुंदर सूप का उपयोग करके शेष कोड के साथ फ़ाइल करें: # main.py import requests from bs4 import BeautifulSoup # add this
response = requests.get( 'https://news.ycombinator.com/news' ) yc_web_page = response.text # add this
soup = BeautifulSoup(yc_web_page, 'html.parser' ) article_tag = soup.find(name= "a" , class_= 'titlelink' ) article_title = article_tag.get_text() article_link = article_tag.get( 'href' ) article_upvote = soup.find(name= "span" , class_= "score" ).get_text() result = { "title" : article_title, "link" : article_link, "point" : article_upvote } print(result)
निम्नलिखित करके ऊपर दिए गए कोड स्निपेट का पालन करें ::
yc_web_page
सुंदर सूप फ़ंक्शन का उपयोग करना और html.parser
HTML फ़ाइलें प्राप्त करने के लिएशेष कोड पर जाने से पहले, आइए हमारे वेब ब्राउज़र में दिए गए लिंक के साथ खोलें
.get()
इसके बाद, पृष्ठ पर राइट-क्लिक करें, और YCombinator समाचार पृष्ठ के तत्व टैब को देखने के लिए निरीक्षण पर क्लिक करें।
हमारा वेब पेज इस तरह दिखना चाहिए:
सुंदर सूप के साथ, हम पृष्ठ पर विशिष्ट तत्वों को उनके वर्ग नामों से लक्षित कर सकते हैं:
find()
तत्व के नाम के साथ कार्य करें, a टैग, और the class_
एक अंडरस्कोर के साथ। यह वेब पेज पर तत्व में वर्ग के ओवरराइट को रोकने के लिए किया जाता है article_tag
का उपयोग .get_text()
समारोह article_tag
विशेषता का उपयोग करना href
साथ .get()
समारोह article_upvote
वेरिएबल, जहां टैग नाम, <span>
, और प्रत्येक लेख लिंक के लिए अंक निकालने के लिए वर्ग नाम का उपयोग किया जाता हैपूरी स्क्रिप्ट लिखे जाने के बाद, हमारे पेज को YCombinator के न्यूज होम पेज से डेटा को परिमार्जन करना चाहिए और इस तरह दिखना चाहिए:
इस लेख ने आपको सिखाया कि वेब पेज से डेटा निकालने के लिए पायथन वेब स्क्रैपर का उपयोग कैसे करें।
इसके अलावा, वेब स्क्रैपर का उपयोग करने की कार्यक्षमता यह है कि यह बड़े डेटा सेट को मैन्युअल रूप से बनाने के बजाय तेजी से बनाने में समय और प्रयास बचाता है।